package com.qf.interceptors;


//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼            BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  


import com.fasterxml.jackson.databind.ObjectMapper;

import com.qf.constans.ResultCode;
import com.qf.dto.R;
import com.qf.entity.TAdminUser;
import com.qf.mapper.UserUrlMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * Created by jackiechan on 2021/10/28 11:37
 *
 * @author jackiechan
 * @version 1.0
 * //TODO 给最美丽的芳姐介绍学生
 * @since 1.0
 */
//@Component
public class UrlInterceptor implements HandlerInterceptor {
    private ObjectMapper objectMapper;


    private UserUrlMapper userUrlMapper;

    @Autowired
    public void setUserUrlMapper(UserUrlMapper userUrlMapper) {
        this.userUrlMapper = userUrlMapper;
    }

    @Autowired
    public void setObjectMapper(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    //前置通知
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //判断用户是否登陆
        //我们发现因为这里直接拦截了,没有返回任何数据, 所以前端页面最终是空白的,不合理

        TAdminUser user = (TAdminUser) request.getSession().getAttribute("user");
        Long id = user.getId();//用户 id
        //根据用户的 id 查询能访问的地址
        List<String> urls = userUrlMapper.findAllUrlsByUserId(id);
        //获取当前访问的地址
        String uri = request.getRequestURI();
        //判断当前访问的地址在不在允许访问的范围中
        boolean contains = urls.contains(uri);
        if (!contains) {
            System.out.println("未授权");
            R error = R.setError(ResultCode.NOT_ALLOW_ACCESS, "未授权", null);
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(objectMapper.writeValueAsString(error));
        }
        return contains;
    }

}
